package com.ruoyi.equ.service.impl;

import java.util.List;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.equ.domain.EquAsset;
import com.ruoyi.equ.domain.vo.EquMoveVos;
import com.ruoyi.equ.service.IEquAssetService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import com.ruoyi.equ.mapper.EquMoveMapper;
import com.ruoyi.equ.domain.EquMove;
import com.ruoyi.equ.service.IEquMoveService;

/**
 * 移动记录Service业务层处理
 *
 * @author ruoyi
 * @date 2025-11-05
 */
@Service
public class EquMoveServiceImpl implements IEquMoveService
{
    @Autowired
    private EquMoveMapper equMoveMapper;
    @Autowired
    private IEquAssetService equAssetService;
    /**
     * 查询移动记录
     *
     * @param moveId 移动记录主键
     * @return 移动记录
     */
    @Override
    public EquMove selectEquMoveByMoveId(Long moveId)
    {
        return equMoveMapper.selectEquMoveByMoveId(moveId);
    }

    /**
     * 查询移动记录列表
     *
     * @param equMove 移动记录
     * @return 移动记录
     */
    @Override
    public List<EquMove> selectEquMoveList(EquMove equMove)
    {
        return equMoveMapper.selectEquMoveList(equMove);
    }

    /**
     * 新增移动记录
     *
     * @param equMove 移动记录
     * @return 结果
     */
    @Override
    public int insertEquMove(EquMove equMove)
    {
        equMove.setCreateTime(DateUtils.getNowDate());
        return equMoveMapper.insertEquMove(equMove);
    }

    /**
     * 修改移动记录
     *
     * @param equMove 移动记录
     * @return 结果
     */
    @Override
    public int updateEquMove(EquMove equMove)
    {
        equMove.setUpdateTime(DateUtils.getNowDate());
        return equMoveMapper.updateEquMove(equMove);
    }

    /**
     * 批量删除移动记录
     *
     * @param moveIds 需要删除的移动记录主键
     * @return 结果
     */
    @Override
    public int deleteEquMoveByMoveIds(Long[] moveIds)
    {
        return equMoveMapper.deleteEquMoveByMoveIds(moveIds);
    }

    /**
     * 删除移动记录信息
     *
     * @param moveId 移动记录主键
     * @return 结果
     */
    @Override
    public int deleteEquMoveByMoveId(Long moveId)
    {
        return equMoveMapper.deleteEquMoveByMoveId(moveId);
    }

    /**
     *  新增移动记录并修改设备状态
     *
     */
    @Override
    public Boolean finishMoveAndAsset(EquMove equMove) {
        //移动结束后，新增一条设备移动记录移出 / 移入科室、时间、状态
        //更新 资产设备表“设备存放地点、所属科室（永久调拨）
        //假设 由传入的信息是有关 科室A的设备被移动到科室B
        try {

            // 情况一：只添加一条 移入/移除  记录
            // 即只添加 科室A设备被移出到科室B 的信息
            // 新增移动记录
            int i =equMoveMapper.insertEquMove(equMove);
           if (i <= 0){
               return false;
            }
            // 修改设备状态
            // 修改设备的 use_dept storage_location 字段
            // 假设
            String useDept = "科室B";
            String storageLocation = "b大楼";
            // 先通过assetId获取到原设备的信息
            Long assetId = equMove.getAssetId();
            EquAsset equAsset = equAssetService.selectEquAssetByAssetId(assetId);
            // 修改设备资产信息
            equAsset.setUseDept(useDept);
            equAsset.setStorageLocation(storageLocation);
            int i1 = equAssetService.updateEquAsset(equAsset);
            if (i1 <= 0 ){
                return false;
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    /**
     * 查询移动记录列表
     *
     * @param equMoves 移动记录
     * @return 移动记录
     */
    @Override
    public List<EquMoveVos> selectEquMoveVosList(EquMoveVos equMoveVos) {
        return equMoveMapper.selectEquMoveVosList(equMoveVos);
    }
    /**
     * 获取移动记录详细信息
     * @param assetId
     * @return List<EquMove>
     */
    @Override
    public List<EquMove> getMovesByAssetId(Long assetId) {
        return equMoveMapper.getMovesByAssetId(assetId);
    }
}
